/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.servinf.ani.validadorani.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 *
 * @author mortiz
 */
public class PropertiesReader {
    
    
    public static final int DATA_TYPES = 1;
    public static final int MANDATORY_FIELDS = 2;
    
    /**
     * Construye un mapa que tiene como llave el nombre del campo en la capa y como valor
     * un boolean que representa si fue encontrado o no.
     * @param layer nombre de la capa
     * @return Mapa para saber los campos requeridos están o no.
     * @throws IOException en caso de lectura del properties
     */
    public static Map<String, Boolean> getFieldsOfLayer(String layer) throws IOException {
        Map<String, Boolean> fields = new HashMap<String, Boolean>();
        //Get keys of properties
	Properties prop = new Properties();
	InputStream input = null;
	try {
		String filename = "properties\\" + layer + ".properties";
                input = PropertiesReader.class.getClassLoader().getResourceAsStream(filename);
    		if(input==null){
    	            System.out.println("Sorry, unable to find " + filename);
    		    return null;
    		}
                
    		//load a properties file from class path, inside static method
    		prop.load(input);

		Enumeration<?> e = prop.propertyNames();
		while (e.hasMoreElements()) {
			String key = (String) e.nextElement();
			String value = prop.getProperty(key);
			fields.put(value, Boolean.FALSE);
		}
	} catch (IOException ex) {
		ex.printStackTrace();
	} finally {
		if (input != null) {
			try {
				input.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
        return fields;
    }
    
    /**
     * Construye un mapa que tiene como llave el nombre del campo en la capa y como valor
     * un boolean que representa si el tipo de dato coincide o no.
     * @param layer
     * @param property Propiedad de la capa que se está leyendo. (Tipos de datos o Campos obligatorios)
     * @return
     * @throws IOException 
     */
     public static Map<String, String> getDataOfLayer(String layer, int property) throws IOException {
         Map<String, String> fields = new HashMap<String, String>();
        //Get keys of properties
	Properties prop = new Properties();
	InputStream input = null;
	try {
                String filename = null;
                if(property == DATA_TYPES) {
                    filename = "properties\\" + layer + "_type.properties";
                }
		if(property == MANDATORY_FIELDS) {
                    filename = "properties\\" + layer + "_mandatory.properties";
                }
                input = PropertiesReader.class.getClassLoader().getResourceAsStream(filename);
    		if(input==null){
    	            System.out.println("Sorry, unable to find " + filename);
    		    return null;
    		}
                
    		//load a properties file from class path, inside static method
    		prop.load(input);

		Enumeration<?> e = prop.propertyNames();
		while (e.hasMoreElements()) {
			String key = (String) e.nextElement();
			String value = prop.getProperty(key);
			fields.put(key, value);
		}
	} catch (IOException ex) {
		ex.printStackTrace();
	} finally {
		if (input != null) {
			try {
				input.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
        return fields;
     }
}
